package persistence.daos;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import persistence.ConnectionPool;

import model.Usuario;

public class UsuarioDAO 
{
	
	public static void insert (Usuario usuario)
	{
		Connection con = ConnectionPool.getPoolConnection().getConnection();
		
		try
		{
			//Preparar sentencia insert en tabla destino
			String sentencia = "INSERT INTO Usuario VALUES (?,?,?,?,?,?,?)";
			PreparedStatement ps = null;
			ps = con.prepareStatement(sentencia);
			
			ps.setString(1,usuario.getDni());
			ps.setString(2,usuario.getNombre());
			ps.setString(3,usuario.getApellido());
			ps.setString(4,usuario.getDomicilio());
			ps.setString(5,usuario.getTelefono());
			ps.setString(6,usuario.getEmail());
			if(usuario.getEstado())
				ps.setString(7,"1");
			else
				ps.setString(7,"0");

			ps.execute();
			
			ConnectionPool.getPoolConnection().realeaseConnection(con);
			
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Insertar Cliente: " + e.getMessage());
				System.out.println("Stack Trace al Insertar Cliente: " + e.getStackTrace());
				ConnectionPool.getPoolConnection().realeaseConnection(con);
	      }
	}
	public static Usuario select (String dniUsuario)
	{
			Usuario usuario = null;
			//Obtener conexion BD 
			Connection con = ConnectionPool.getPoolConnection().getConnection();
			
			//Generar sentencia SQL
			try
			{
				//Preparar sentencia insert en tabla destino
				String senten = "SELECT * FROM Usuario WHERE Dni = ?" ;
				PreparedStatement ps = null;
				ps = con.prepareStatement(senten);
				ps.setString(1,dniUsuario);
				ResultSet result = ps.executeQuery();
				while (result.next())
				{
					usuario = new Usuario();
					usuario.setDni(result.getString("Dni"));
					usuario.setNombre(result.getString("Nombre"));
					usuario.setApellido(result.getString("Apellido"));
					usuario.setApellido(result.getString("Domicilio"));
					usuario.setTelefono(result.getString("Telefono"));
					usuario.setEmail(result.getString("Email"));
					if(result.getString("Estado").equals("1"))
						usuario.setEstado(true);
					else if(result.getString("Estado").equals("0"))
						usuario.setEstado(false);
					

					
				}
				
				ConnectionPool.getPoolConnection().realeaseConnection(con);
				return usuario;
			}
		      catch( SQLException e ) 
		      {
					System.out.println("Mensaje Error al Borrar Cliente: " + e.getMessage());
					System.out.println("Stack Trace al Borrar Cliente: " + e.getStackTrace());
					ConnectionPool.getPoolConnection().realeaseConnection(con);
		      }
		      return usuario;
		
	}

	public static void delete (String dni)
	{
		Connection con = ConnectionPool.getPoolConnection().getConnection();
		
		try
		{
			String sentencia = "UPDATE Usuario SET estado='0' WHERE dni=?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(sentencia);
			ps.setString(1, dni);
			
			ps.execute();
			
			ConnectionPool.getPoolConnection().realeaseConnection(con);
			
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Mensaje Error al Eliminar Cliente: " + e.getMessage());
				System.out.println("Stack Trace al Eliminar Cliente: " + e.getStackTrace());
				ConnectionPool.getPoolConnection().realeaseConnection(con);
	      }
	}
	
	
	
	
	
	
	
	
	
	
	
	public static void update (String dni,String nom,String ap,String dom,String tel,String email)
	{
		Connection con = ConnectionPool.getPoolConnection().getConnection();
		if (nom!= null || ap!=null || dom!= null || tel!= null || email!= null){
			try
			{
				String sentencia = "UPDATE Usuario SET ";
				
				if(nom !=null)
					sentencia+= "nombre=?,";
				
				if(ap !=null)
					sentencia+= "apellido=?,";
				
				if(dom != null)
					sentencia+= "domicilio=?,";
				
				if(tel!=null)
					sentencia+= "telefono=?,";
				
				if(email!=null)
					sentencia+= "email=?";
				
				
				//si existiese, quito la coma final
				
				if (sentencia.endsWith(","))
				{
					sentencia = sentencia.substring(0, sentencia.length()-1);
				}
	
				sentencia+= " WHERE dni=?";
				
				PreparedStatement ps = null;
				ps = con.prepareStatement(sentencia);
				
				int posicion=1;
				if(nom !=null)
					{
						ps.setString(posicion,nom);
						posicion++;
					}
					
				
				if(ap !=null)
					{
						ps.setString(posicion,ap);
						posicion++;
					}
					
				
				if(dom != null)
					{
						ps.setString(posicion,dom);
						posicion++;
					}
				
				if(tel!=null)
					{
						ps.setString(posicion,tel);
						posicion++;
					}
				
				if(email!=null)
					{
						ps.setString(posicion,email);
						posicion++;
					}
				
				ps.setString(posicion,dni);
				
				
				ps.execute();
				
				ConnectionPool.getPoolConnection().realeaseConnection(con);
		
			}
			
		      catch( SQLException e ) 
		      {
					System.out.println("Mensaje Error al Insertar Cliente: " + e.getMessage());
					System.out.println("Stack Trace al Insertar Cliente: " + e.getStackTrace());
					ConnectionPool.getPoolConnection().realeaseConnection(con);
		      }
		}
	}
	
	
	


}
